package com.zyp.jobseeker.utils;

import lombok.Data;
import org.springframework.http.HttpStatus;

/**
 * 统一响应结果工具类
 */
@Data
public class ResultUtil<T> {
    private Integer code;      // 状态码
    private String message;    // 消息
    private T data;            // 数据
    private String httpStatus; // HTTP状态

    public ResultUtil() {
    }

    public ResultUtil(Integer code, String message) {
        this.code = code;
        this.message = message;
        this.httpStatus = getHttpStatus().name();
    }

    public ResultUtil(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
        this.httpStatus = getHttpStatus().name();
    }

    /**
     * 成功响应
     */
    public static <T> ResultUtil<T> success() {
        return new ResultUtil<>(200, "操作成功");
    }

    /**
     * 成功响应（带数据）
     */
    public static <T> ResultUtil<T> success(T data) {
        return new ResultUtil<>(200, "操作成功", data);
    }

    /**
     * 成功响应（带消息和数据）
     */
    public static <T> ResultUtil<T> success(String message, T data) {
        return new ResultUtil<>(200, message, data);
    }

    /**
     * 失败响应
     */
    public static <T> ResultUtil<T> fail() {
        return new ResultUtil<>(500, "操作失败");
    }

    /**
     * 失败响应（带消息）
     */
    public static <T> ResultUtil<T> fail(String message) {
        return new ResultUtil<>(500, message);
    }

    /**
     * 失败响应（带状态码和消息）
     */
    public static <T> ResultUtil<T> fail(Integer code, String message) {
        return new ResultUtil<>(code, message);
    }
    /**
     * 获取与业务 code 对应的 HTTP 状态码
     */
    public HttpStatus getHttpStatus() {
        switch (this.code) {
            case 200: // 业务成功
                return HttpStatus.OK;
            case 400: // 参数错误
                return HttpStatus.BAD_REQUEST;
            case 401: // 未授权/未登录
                return HttpStatus.UNAUTHORIZED;
            case 403: // 权限不足
                return HttpStatus.FORBIDDEN;
            case 404: // 资源不存在
                return HttpStatus.NOT_FOUND;
            case 500: // 服务器内部错误
                return HttpStatus.INTERNAL_SERVER_ERROR;
            // 其他业务 code 可按需添加
            default:
                // 未知 code，默认返回 200（避免前端认为请求失败）
                return HttpStatus.OK;
        }
    }
}
